C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 A& J5 M5 z3 D: L3 Z6 f# l
main文件:6 V  V2 ?( h( _, w% `7 t6 R. E
interrupt void interrupt4(void)  " v5 W( {; m; d. W% E: _9 Q
{
6 z5 r! ]7 m# x  Uint32 sample;
" {# H. c% [  |% q8 @2 F: v
6 ^7 I7 V2 ]$ ]( M" O) d  sample = input_sample(); // read L + R samples from ADC9 V1 Y6 S" n; Y5 R* x3 `
  output_sample(sample);   // write L + R samples to DAC
6 n0 ^* x# ^/ B& S. B) ^. ?  return;
( J1 j, J0 x; q( o& n}: G/ D* }8 m$ v: H% R- L$ }& p
- g/ C7 l( K5 O; W: `$ A
int main( void )$ W* p# w5 D& u% n" t/ |
{
' T: r/ K: f' l  ^0 n/ U! n; ?) X
1 R9 f( F. z6 [5 _6 B- Z0 I    /* Initialize BSL */" x( Y- E6 C4 p3 o& ?6 z# k
    EVMC6747_init( );
' i0 p8 }' D" c1 E( T        /* Call evmc6747_intr function */* U# D* G% M0 m" N7 f
    aic3106_init( );. e; J) Z% q2 i$ o. t
        while(1);* X( I; s+ m+ S9 ^- x
}
& Q* f; ]) D) w6 J2 L8 G  }8 x( B, [  b7 e! l- X
& E9 t. b9 A/ y4 I' d  ^- @7 k: r9 ^9 J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% ~4 ~/ O4 ]8 K
/* Initialize MCASP1 */
1 A( n3 i# T& q; {    mcasp = &MCASP_MODULE_1;3 `& _" m/ R* R; u/ d9 M4 M
    mcasp->regs->GBLCTL  = 0;       // Reset
+ i4 f0 t& k  Y, p! w4 Y5 I    mcasp->regs->RGBLCTL = 0;       // Reset RX+ z' p7 i+ d9 I
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& j2 y4 J! q( B3 a, m' S2 _    mcasp->regs->PWRDEMU = 1;       // Free-running
- t& K4 o: o- T/ Q# y$ u& z   // configure McASP0 receive registers
+ `0 ?! c8 G9 C; U" l) N" }6 E    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 B) L0 F8 [, e6 |) e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 v$ F4 Z: h2 I! x5 Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ M' p! n6 N& C/ y9 @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- d- C  j! C8 |" W9 R- Q' r2 O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* K8 O/ ?* ~- a8 v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, z5 M7 n7 t/ V' m2 e! K* h    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 }4 l) [) A; \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j& e- ]4 e6 b# {, [, q7 x1 X  p; H
9 i" V" J2 [' W! l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 D9 s* L" ~& s" V( y& G; d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* c4 @2 ]; P4 s5 ?
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' p$ V5 z! Z1 R; d% A2 a. D& d* I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 g% J9 ~8 v3 D' R) ^4 d% W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 D$ P4 k9 W. k# W    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 P3 V/ s% C9 v8 ]8 P) _
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ P& \+ T8 `( [8 H6 f; H
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G, r. A; }- R5 H! l% s0 ?9 L9 m  C* d0 Y+ R5 i  O! ^# M3 p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ t7 l* j/ \2 e1 ?3 v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( e8 ?3 D/ b6 C3 _1 ~    mcasp->regs->PFUNC      = 0;          // All MCASPs* h  Q& _$ I* M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; q7 F* W# a  J: B
( e: J3 S% I$ m" m& B! t  h% [8 P/ H    mcasp->regs->DITCTL     = 0x00000000; // Not used- G# O4 |/ I! u* Z7 {- K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# A5 e& ]! p7 C, D) E    mcasp->regs->AMUTE      = 0x00000000; // Not used- `3 n% G$ N. b" z; @( o- B

$ S, V# O" [- G9 j/* Starting sections of the McASP*/' c5 P0 Y( t4 B) s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% k$ E7 t% S6 B2 E- r1 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, \- |2 A% N: r8 M% b! r' T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 u4 G- l6 {4 a% S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' f7 f4 u: Q! ^
9 A* w* i# K5 v5 ^3 d! O* u7 q) U/ y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) s$ |- L& F) p0 u5 {5 Z# f2 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, W7 Z2 I- Q) P5 D; C! Q+ Y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" D! g4 R. Q5 z& M- Q) \' z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 u2 s7 M3 x7 A. b+ O
* K1 C) }4 f5 y5 a    mcasp->regs->XSTAT = 0x0000ffff;
) W4 I2 u! _9 w) g$ w    mcasp->regs->RSTAT = 0x0000ffff;
/ [# n2 \+ z7 j& k- \( D+ a4 k5 m1 B$ P6 w5 o1 H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! c' o: B' Q( Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% j# k. n6 {; I( `2 A    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' F: d% l& ]4 g, h3 p! m+ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 j( H7 f" m; ?4 ?; Z& `$ Q
+ Z3 Q4 N& j% ?2 t6 A' r3 q$ C  z    /* Write a 0, so that no underrun occurs after releasing the state machine */. ~/ s- W& K7 Q# g/ A
    mcasp->regs->XBUF5 = 0;6 H7 U5 w, E& P
    mcasp->regs->RBUF0 = 0;
) |5 i, A8 l- e, |' Q& ~* l* ^/ F+ \- F5 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - e* X6 L3 V) R( K1 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 x2 l0 j& }7 b" Y* u0 P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 j! ~3 k8 l- a- M. O3 H* I2 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. B/ {, a( J  m

) G$ B0 U' L& b    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 _, X+ ^% y& L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" o) I# W) L$ u
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! S+ r9 `% B; A& Z! h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' D4 O! `; F* W9 \& U  Y. w
0 h. u4 G( D% q5 \    CSR = 0x0000;
1 E; B% N- _7 X; ^    INTC_INTMUX1 = 0x3d;+ x$ a; Y7 r( S' {) V% H1 I6 m
    ISTP = (unsigned int)vectors;
6 I1 |, G; s1 J    ICR = 0xFFF0;  9 T5 k; Q8 Q2 J/ F0 F" E9 x
    IER |= 0x12;  
2 J6 Q! B" {9 L' r6 [3 z    CSR |= 0x01;  ) E+ e. [& Y& I) {5 G' Z  @& Q
- r  |+ c: e( U! H+ X2 s/ O
* C9 y' ^8 i" C8 e' Q3 V7 d* I

. ^7 ?+ e8 j1 ?' Q* D6 K8 ~还有就是两个输入输出函数:8 ?# F9 e7 v5 G
void output_sample(Int32 out_data)
; E0 x( V+ c5 n. \2 I; @{
3 s" u7 z+ h8 Z  AIC31_data.uint = out_data;  
5 ]/ Z7 f& p) X. F$ {  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 Y8 T( u" v/ s+ A
}" Z* m  W% X" ~5 c0 C# M% B
2 K# E9 D. ^4 I5 g
Int32 input_sample(void)5 y- ?, m9 j' W3 N9 E, [# X
{  
- t0 P( D8 {0 e8 f  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: `5 ~6 m6 A" B) P% q  return (AIC31_data.uint);
2 v7 w0 {" y; R5 x}
1 P" U1 i. n0 T4 v
& F1 x# A/ G( H' i% c$ o
分享到:  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-4-6 22:45 , Processed in 0.041824 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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