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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; [0 k5 N% _+ W# t" ]main文件:. A) e- e8 N6 X& b' w4 o5 s/ ^. z
interrupt void interrupt4(void)  - o# K" W# b5 S1 i" H* g
{1 ^+ R0 q& l+ v
  Uint32 sample;  x4 n" I4 H6 W6 v: [( C

, r+ r" J/ F; Z1 @8 l+ W  sample = input_sample(); // read L + R samples from ADC
5 z& F, W( @) w1 ]  output_sample(sample);   // write L + R samples to DAC 1 z) K! j3 @# a% C# J- o' X
  return;
- M% ?* T+ O" u& S}
# i' J/ Q0 a6 f+ M7 F* [: O
8 \3 t/ g! w# E( z2 Fint main( void )# s  v% Q& T/ o" n2 d) h3 |+ [
{
( w3 V( w) X7 g$ g+ S2 O  Y2 i1 t0 l& z
    /* Initialize BSL */
' x0 R# F+ r: D    EVMC6747_init( );
8 z" Q4 n8 H" K& ~; N( V- A5 d% X$ {        /* Call evmc6747_intr function */
: I* ~7 y  [5 m8 N& Y    aic3106_init( );
% b6 m* c# g' ]8 n- }- i& F0 @        while(1);. x9 o4 k' Q' w7 {5 u3 C% b! K
}
9 V- ?; f& M2 y, }7 R7 K: Z" r/ N
! m1 C) }# l2 P( U1 Q3 b! b4 t4 w# N# W3 r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 O' c  B, L# a/* Initialize MCASP1 */' F4 `: h, g* P9 }: w% y0 q5 l# t
    mcasp = &MCASP_MODULE_1;; n( j  x8 O7 t! j7 v0 O! ?2 ^# ]. W
    mcasp->regs->GBLCTL  = 0;       // Reset
, L" p# A' U- V& E4 {) g    mcasp->regs->RGBLCTL = 0;       // Reset RX
* J" G! j* b6 z: S/ @3 q6 m, M    mcasp->regs->XGBLCTL = 0;       // Reset TX
& H- G: E$ ]  h- `' k! J    mcasp->regs->PWRDEMU = 1;       // Free-running
* j0 x5 f( ~, n0 i4 m   // configure McASP0 receive registers
2 M/ O2 d- M* D0 p9 \+ {9 ~    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, K4 @/ r2 k# k. E5 A9 Z4 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" v5 I1 i0 v( m6 j2 o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' I3 }2 v; x: h  R/ k1 M    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); b+ P$ S+ i: l$ v: P  B: G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 Y0 R7 t$ i7 S; o8 `' e
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 `8 t* E2 _  J0 `; b3 c+ u    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ _6 d# }3 r( O" H( J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 A/ ]% i% M" ~
% P# f: a( U/ }( ~5 ^, ?  h+ e# U- F5 a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 Z$ x5 w) B# z/ A! l    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 F" A0 F; a3 _' Q5 v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 }  |' P6 `, J1 G/ _: L4 x
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 S0 b0 Z1 A  v6 H2 V! e4 J% m    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& G6 d1 J. B" e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. V. ~1 S  ], ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& {- m& m- W- d0 t# s) A' d* {7 B    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* ^& @+ I$ Y$ d+ k- o
8 Y. e4 _1 ^8 d& S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; V2 ^( F  M* C6 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' v' C5 m/ u1 g3 d8 S
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) Y6 A7 \: Y2 C0 b    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! e' b* J5 F7 K+ S0 C. w. ]; V( x

2 M1 ]5 L1 P- f( g- P0 ~& q    mcasp->regs->DITCTL     = 0x00000000; // Not used. H$ Y7 W# y/ j8 z& s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ }2 @8 P+ D- [4 p3 G    mcasp->regs->AMUTE      = 0x00000000; // Not used- W% y+ k2 E+ F  f/ ~
0 q, H/ x( B3 l8 ~5 L) G
/* Starting sections of the McASP*/
" k0 c$ O; [* `  ]6 p( s' Z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) ~3 o& J* s8 O- v( K9 A' P& {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / D, |+ J# b8 H/ x' Y- N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 \2 C+ o! {' n. k1 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 q# C5 Z( m1 n9 B, h8 Q: W/ N5 g! O0 Q$ _0 C9 K* F# J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " g6 v5 V( k' b+ F  D0 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 n( U' }9 V5 Z, k6 B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% g/ w1 J! Q; \1 d3 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ C+ P9 ]; u6 {: a* C
/ V( V! ~( d) V6 `0 d3 ]$ a
    mcasp->regs->XSTAT = 0x0000ffff; 3 i9 [) D% q. v0 [' q7 [0 o
    mcasp->regs->RSTAT = 0x0000ffff; 0 }4 f" t: M3 b; a6 v
" v5 b" X0 l$ T# [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& Z- P' l& `9 ~  {6 ^& {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- K; m1 Z1 Z: o% ^& i    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 l6 M4 P2 T" e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* K) t& p# C8 t. l
9 i6 n3 \: j9 ^4 z5 {  K    /* Write a 0, so that no underrun occurs after releasing the state machine */
: s# L' Q! J4 I/ v5 H1 Y    mcasp->regs->XBUF5 = 0;
) J1 F& ?( \; [) n! y( _+ V7 L    mcasp->regs->RBUF0 = 0;: v. P) g0 O; N

& |; V6 F. u4 d4 K+ |2 T) [1 F2 C    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + t* e+ }+ V1 `7 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 @, i* E( g  p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 _" C* J5 _& B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) e  `" l6 G  p4 u4 o2 M8 }. X$ A9 `
6 N' R4 N$ q( D/ p( b! ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 V1 p2 v+ w; R# t+ m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ]0 p9 f, L) Z$ {$ @4 R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % i: _5 C/ }; ]5 {4 o1 @; q) u% j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 f) Z) n* V9 g& V1 ?0 N; E

$ M% [8 ^" `8 P. i( D% u" ?9 u    CSR = 0x0000;
$ }7 S% w, [( `7 A' B/ }1 ]    INTC_INTMUX1 = 0x3d;
% u$ c- `" f6 m# s6 Z/ P1 f  F    ISTP = (unsigned int)vectors;
" _2 [4 j, x% {    ICR = 0xFFF0;  1 r3 P0 D. g) x; y
    IER |= 0x12;  
. F% g# i/ J4 k7 N) d    CSR |= 0x01;  
: y- Y4 v# j3 z
+ i5 Y/ ~5 q2 }9 O6 S2 r
( ^4 @- u; U2 q$ c& I/ ^& H9 ]
还有就是两个输入输出函数:' S/ X) ^; {7 P: l  ^
void output_sample(Int32 out_data)
, j3 n* t$ f9 `% w{
. i, u& @6 @6 q/ @  AIC31_data.uint = out_data;  
& |! k6 N- R3 Z/ Y( `  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) I) H# _  y$ ]( ^; k/ g& I4 ^, O}0 j" n2 Y7 O6 a6 J8 T

2 u2 P( U& N! T8 kInt32 input_sample(void)
( @% q) m& c5 G{  
; |" f2 S1 f9 ^  AIC31_data.uint = MCASP1_RBUF0_32BIT;  O* A2 ]3 l" @2 \8 O
  return (AIC31_data.uint);
- r* G# W! h8 d! f" V}
+ @1 Z) T2 q& ~! T5 n
, r1 S  \, P; M/ ]3 Z, s! |) r4 J
分享到:  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, 2025-11-8 05:49 , Processed in 0.037090 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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