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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. }2 j0 Q: m& |1 u! ^$ tmain文件:
% W, v2 i/ C  F  l' g3 g; ]% y- Ointerrupt void interrupt4(void)  9 _7 i& ^% q( ?. g0 U8 Q
{  @1 r( S% }$ e4 Y1 r/ \7 |! q* |
  Uint32 sample;
! H8 V3 R- Z) ~! ~5 o9 `
# W3 Q* B! R) \* D; D  sample = input_sample(); // read L + R samples from ADC% a& |$ m; g+ ^& P' _! k( _
  output_sample(sample);   // write L + R samples to DAC
4 B; I) H% J% _( T$ X4 z6 T* T  return;
0 _% f1 k" h+ C% y7 x}
9 t+ o* o/ P2 v! |5 I4 s: B6 U6 ^" V5 C) H9 f% U$ U
int main( void )
0 f% b; D( i/ X{: u% V6 W$ g& X5 f0 H1 w8 p! P4 p

& V1 z8 s* m4 ^- i  Q/ d; }, g# y    /* Initialize BSL */0 t1 t3 x$ {, d" K6 b8 L% m0 K
    EVMC6747_init( );$ i# U' g" [. G
        /* Call evmc6747_intr function */
; c" a8 h; a, _3 S: W    aic3106_init( );
, ^7 _5 T/ n- I& I  h5 D" L        while(1);" c# v; K" F5 S9 j+ I
}: r3 N' ?7 [4 X0 C( x

7 T! N8 N+ {! t: M
" `0 x$ S6 r5 V1 f/ R0 yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ D+ k. C" M* s9 x/* Initialize MCASP1 */( }" [! d4 }$ s7 a0 z
    mcasp = &MCASP_MODULE_1;
, {7 f7 d. ~  U& r0 D2 x    mcasp->regs->GBLCTL  = 0;       // Reset8 i4 P. D; G4 w; @
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ s# ]# C  E) I
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& T, m; N7 o. |7 I    mcasp->regs->PWRDEMU = 1;       // Free-running! J2 @' l( L' `. z* _
   // configure McASP0 receive registers
' h; {" K  R4 z  X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% n. |. J4 I/ f+ [& p4 k$ x$ j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ @. P) H& [& c* x  T9 H# l$ B( I3 R    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 W+ X7 y9 s7 f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ R7 L  C6 z  _' S    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 t" r$ U1 U. ~2 }2 W6 X! U
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: q* b- Z! P4 |$ }; C! b0 {4 R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used: b7 m6 R8 @3 z( a1 D
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 e" U9 z6 J" u9 J+ v  O( L5 W5 M2 B  G+ l6 v
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 E$ J, z3 z6 f4 x( x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% e% `! x. C* E8 s. w9 H! M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! S6 f; {! [1 a7 U; _) _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 T7 d% \$ N" D  z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  `. Q7 w: [7 e! r/ D" f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 K9 {( V/ Z7 V% d  J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 q+ l1 g3 P* s0 n, b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 ], T# q. |' D. r1 j( c/ ~

2 T- E  k( m6 `. Q. e4 ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 ?# L$ q% }) K; P- i5 c/ g* W
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  f8 ]7 X9 {. o& @
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ b2 U' C7 M6 O+ m& U0 U; T! Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) ?" t9 F- G, v) U4 v! {  \
" W5 I, `) l+ Q8 `: I, _* ]    mcasp->regs->DITCTL     = 0x00000000; // Not used/ ]4 s8 L6 A- r2 e& \9 W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 Y( U! [8 D( g8 n2 f- T
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 i# f# y# o5 l  ]$ g- v

6 v) L/ m& v! v, o/* Starting sections of the McASP*/
. X& Q# }1 j1 o* ?    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 I- d9 N, v7 Q* Y  _& F4 M' \. l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% Z; w4 s$ S; M/ F0 E8 ]" @) W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . P2 p% k7 L: u$ H/ H: O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# G# p% `- L9 h7 W4 m1 {) p0 V$ E2 v, _4 D! O4 T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + Z6 r* h- j. S- d5 e7 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# a" z( ?  e. |# R" X$ F4 O# X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 L0 w. x2 l" |3 G4 s& J) P  |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% M5 B! m% ~5 U& @( [8 d2 k8 ]

" k9 v# m; b. K- o. b$ p: m" {    mcasp->regs->XSTAT = 0x0000ffff;
) W- `* ^, Y8 \) F4 F& \    mcasp->regs->RSTAT = 0x0000ffff;
2 f0 s4 h8 K) H3 k6 D/ ^& ?( v2 |9 F8 f  o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: |9 |  R  `: ^9 {, b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 w/ v5 K8 f6 v9 h; j& l8 y$ v5 V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % K5 k- ?. n4 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 I4 D3 z$ o- {- t  u) v. E
/ }3 I/ v: H  J' W4 W9 d* \/ s
    /* Write a 0, so that no underrun occurs after releasing the state machine */. }8 K1 O* y7 S
    mcasp->regs->XBUF5 = 0;
+ b! @# n7 A) P0 Z% K" [( S' K- j    mcasp->regs->RBUF0 = 0;+ Z7 \  K: ]% |* x$ D9 t8 Z

- m- w* X& s( I# ~3 z$ J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 v; t+ c& X! ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 C  L' K3 _( G! }: s0 ]& o$ x+ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) ^* m1 y3 n0 @- V. a* E1 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 p) o: e, J7 u; M# r

. [+ d& S. L6 }9 T8 ?  j" o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & l( d! m  z! s* G2 C# |- b2 }* v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: d1 C) d2 @' {
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ a8 i- ?; w! e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 i* S( {# v' W" p1 W  a

2 W$ g6 `, M& {1 ]. ?: w    CSR = 0x0000;4 s- `, v8 U, s5 f# O  s2 L) j
    INTC_INTMUX1 = 0x3d;! J( Q- e; Y. J" Z1 l
    ISTP = (unsigned int)vectors;
( I" w6 w) h1 t8 {" j- o+ b    ICR = 0xFFF0;  ! S, y: [/ ^/ X% Q
    IER |= 0x12;  ' u+ t0 a9 I% y6 k; _' P: d
    CSR |= 0x01;  
4 [6 }: O' ~4 f( c" g% {$ C/ V

5 W# C& C: q  K0 f4 a4 P5 x
5 |) }8 a! b# A. ~. c' w, b9 |还有就是两个输入输出函数:
/ z) u1 ]7 x9 l* k- u: g3 O( Hvoid output_sample(Int32 out_data)
7 r5 G) Z, l) h: [{5 ]& o9 p# A  R3 }# H$ P. P9 z
  AIC31_data.uint = out_data;  4 Z% [6 S$ Y9 ?( s/ h" k3 W* w
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ o( i; G. i* N" f" ^}) ~# W2 G& }2 \" t: u, }+ r

& F/ W, \6 v" \. l& sInt32 input_sample(void)
$ Q* L0 ^( G4 q) x3 x{  
0 v: d8 @1 \* v% R8 F  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 E. H4 ^3 {" A% l$ _  return (AIC31_data.uint);- R; g: y8 g8 M$ h  [
}6 S$ X+ {9 f5 e( O
. m# f: T  a, D
分享到:  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-12-29 05:10 , Processed in 0.039380 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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