C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5941|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 W# I: j6 C2 E$ ^8 l/ Xmain文件:
5 Q) Q3 Y3 }' i* a4 Y6 C" minterrupt void interrupt4(void)  
% z5 Y3 C$ w8 j" ^0 N" X4 M% _{. C! K7 c% U9 n1 _: \& I4 O
  Uint32 sample;: R: y9 s- {: w% Q

6 ?: W7 _8 K, {1 M0 G  sample = input_sample(); // read L + R samples from ADC
7 Z+ q. j2 ^4 ^: p7 H$ D. i  output_sample(sample);   // write L + R samples to DAC
4 e5 |5 }3 `7 k  return;7 c$ g  Q7 d4 ]" ], H7 O' m
}4 K9 w3 P  q4 ^* w0 Y7 N4 ^- [7 b
6 r6 S5 y1 p1 ~6 G$ H' |
int main( void )
) o$ J/ W/ V! @9 u) c3 y7 f{
5 A1 q2 ]8 E2 z8 ?6 @# P! p% G0 B- A" v7 e* \% B- l
    /* Initialize BSL */1 p* Z7 x$ C. D- ~+ s. ?" t0 F
    EVMC6747_init( );: A( {3 E. @8 c! v+ u
        /* Call evmc6747_intr function */  ]8 L5 O1 {3 O7 E% K
    aic3106_init( );
) a+ A$ i& `2 e2 R        while(1);5 T7 ~2 b' e" N% L& ?
}5 s* x/ j3 ?6 W4 n4 D  O; L) w
( Y1 ~# G* q2 n* z3 P6 N2 g4 R' j

2 k( J' n! S. L2 h. m3 Faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ i: T$ r8 P# `8 m1 [* I8 Z1 j/* Initialize MCASP1 */3 J5 J9 @; B" l  q
    mcasp = &MCASP_MODULE_1;" U) t5 v" J# ]# @( q% x
    mcasp->regs->GBLCTL  = 0;       // Reset
' @& N& b. t* ]  k    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 s. ?2 t  u6 k; Y    mcasp->regs->XGBLCTL = 0;       // Reset TX
( ^! _3 `$ f: h6 ^& Y, F    mcasp->regs->PWRDEMU = 1;       // Free-running
' ~$ J  T  N- v% F) r   // configure McASP0 receive registers
3 d# V7 s. X9 E% Z: D6 D4 Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. D8 d5 v/ v6 n( s) b+ @* P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! O8 E# y7 Q6 [1 |* X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 V" \8 [7 v8 i  k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% P! }1 T% e( b$ J! O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ G& X) I  V8 e0 c4 S
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 B+ m1 r$ e/ p3 u    mcasp->regs->RINTCTL    = 0x00000000; // Not used, ]5 O3 {8 m  o: v4 B3 ~
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: Q1 |* @" G0 J9 R& ^" _
2 m3 x; r% c3 R# g1 g  n3 U/ [4 x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) N8 h' g' \  r! W! A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 s! x1 w9 ~3 m- q8 l" s, h% Q
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 s: M) j% X& `5 e+ M
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) p$ J$ h6 g% }' |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ I# ?* j- S0 S" n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( z: u! T# I3 n9 S5 B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 z0 c5 l3 f/ Y# r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# t, B) r  p; v+ E; z. o
: l! X- ^  ]/ u3 Q/ ^" G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* p+ a& s$ S% {3 A* o- o( g! _    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ J4 E( }' k% a7 H7 x9 c& i    mcasp->regs->PFUNC      = 0;          // All MCASPs; `$ e; g9 F" q8 v* b  ?2 _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& E8 x8 {6 t4 Q: O3 f
: t' d7 j' b1 Y# J
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 |  k* T2 W0 J" v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used" s, r3 p+ }) E5 [) m# z6 P- _9 g  l
    mcasp->regs->AMUTE      = 0x00000000; // Not used& J: z- f) _. ]5 N1 Y- y* y* X

' l, }  X2 i: i/ K" P; U/* Starting sections of the McASP*/
/ Q; m2 N/ R8 c7 [" C    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 F. n+ a: G+ B; O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# k7 d, V; M8 f3 l2 r6 R9 t9 v: y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 |5 m- p+ N. u% I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 T. ?5 o; Y9 N: R) k

' a; C" R! F/ H    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ ]* l5 r2 q5 m% A: B% Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) A! s, Q2 ~; M2 Q# Y- e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  H! b- _8 N+ R& a. @9 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' l  n$ n8 S3 _! d; P% t% s* z
- [" X5 Q, H: y$ `) ?' d    mcasp->regs->XSTAT = 0x0000ffff;
, t( ]: Z) m4 b    mcasp->regs->RSTAT = 0x0000ffff;
/ O* W( U. u1 @8 n" v- `, K! v
: C* v2 T3 A; n7 G# m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ |+ {: h( Z$ l" K/ J7 Y  Y2 u- e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; c& `; f, A- K  a( n/ L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 U  h$ [6 B* p, v& g& K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- M' P) m) Y& P+ [
; A5 N! z5 p9 x( e$ v
    /* Write a 0, so that no underrun occurs after releasing the state machine */
" f/ x& S1 x" g3 ~. ?- _2 @    mcasp->regs->XBUF5 = 0;
: O0 P9 A( |% ]: w9 t    mcasp->regs->RBUF0 = 0;
- n" x8 ~) z1 c4 u8 n6 u7 f( w; C
' a+ L' J0 x. V$ q' N; k    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + J- p0 P# S5 ^9 h$ s( M7 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( @( D, W' Z7 W1 k- W: h
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ Z8 l1 E. z% h" w7 }& ~' Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ [4 w" {, y2 y$ Y* N; o

2 a% m& E: b' p0 e6 K  O' U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % m5 x# k$ U* E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. {+ ^4 T* v, ~: M/ L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% z8 b* X* Q5 B, a$ b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 y  D+ J' Q  c2 b- s' d+ n; ]2 O
& @: B+ S5 I* v7 @) ?! a    CSR = 0x0000;
) b! R( I' X  {    INTC_INTMUX1 = 0x3d;
: [8 u0 Q" O" W3 B    ISTP = (unsigned int)vectors;
* u( I6 E5 C; R" z* f5 N. D    ICR = 0xFFF0;  
: Z% G% ]* k/ s$ m5 S    IER |= 0x12;  7 `) ]7 y7 b1 A! R2 |$ s
    CSR |= 0x01;  / z  v& ^  e/ e9 E* o* {* Q# W, N

( |4 a; F! J$ U* q+ H# n
9 K+ C- a  N. J' L8 C7 q) K1 p9 }. m# ?
还有就是两个输入输出函数:5 E# ^! _. g* Q  \$ T3 I
void output_sample(Int32 out_data)
1 J& \4 E1 q  B* _) D( Y" c& Y{
5 X* s% W0 [' w& S  AIC31_data.uint = out_data;  ( W; j" ^; e  Y4 Q6 l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 `+ H6 g3 J$ v* h8 f}
6 ]7 H/ r0 U+ {7 ], c2 i3 F  P& X
Int32 input_sample(void)0 w0 W" z6 q! S+ A! K( s
{  
/ m2 ^0 W9 q' x  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 b( V3 ?' a: U6 z
  return (AIC31_data.uint);
/ v0 R( l4 W. [* k}
: L/ I# L& P1 t) k0 O& R- ]
+ W3 w* B4 m  h( d" _2 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-8 20:48 , Processed in 0.042013 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表